package com.itheima.aop;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/*切面类,提供增强方法的类*/
@Component
//声明当前bean对象为切面
@Aspect
public class LogAop {
    //声明一个空方法,用来做切入表达式的标识
    @Pointcut("execution( * com.itheima.dao.*.*(..))")
    private void pid(){}

    @Before("pid()")
    public void before(){
        System.out.println("前置增强");
    }

    @AfterReturning("pid()")
    public void afterRunning(){
        System.out.println("后置增强");
    }
    @AfterThrowing("pid()")
    public void throwRunning(){
        System.out.println("异常增强");
    }

    @After("pid()")
    public void after(){
        System.out.println("最终增强");
    }

    @Around("pid()")
    public  Object around(ProceedingJoinPoint point){
        System.out.println("环绕通知"+point);
        System.out.println("方法名称"+point.getSignature().getName());
        Object obj = null;
        try {

            obj = point.proceed();//继续执行目标方法
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return obj;
    }
}
